package cn.funeralobjects.upms.api;

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import reactor.core.publisher.Mono;

import java.util.List;

/**
 * 权限接口
 *
 * @author FuneralObjects
 * Create date: 2020/4/30 5:09 PM
 */
@Validated
public interface PermissionApi {
    /**
     * 添加用户和组的关联关系
     *
     * @param userId  用户id
     * @param groupId 组id
     * @return 无返回
     */
    @PostMapping("/group-user")
    Mono<Void> addGroupUser(@RequestParam Integer userId,
                            @RequestParam Integer groupId);

    /**
     * 添加角色和用户关系
     *
     * @param userId 用户id
     * @param roleId 角色id
     * @return 无返回
     */
    @PostMapping("/role-user")
    Mono<Void> addRoleUser(@RequestParam Integer userId,
                           @RequestParam Integer roleId);

    /**
     * 移除角色和用户关系
     *
     * @param userId 用户id
     * @param roleId 角色id
     * @return 无返回
     */
    @DeleteMapping("/role-user")
    Mono<Void> removeRoleUser(@RequestParam Integer userId,
                              @RequestParam Integer roleId);

    /**
     * 移除组用户关联系
     *
     * @param userId  用户id
     * @param groupId 组id
     * @return 无返回
     */
    @DeleteMapping("/group-user")
    Mono<Void> removeGroupUser(@RequestParam Integer userId,
                               @RequestParam Integer groupId);

    @PostMapping("/api-role")
    Mono<Void> addApiRole(@RequestParam Integer roleId,
                          @RequestParam Integer apiId);

    @DeleteMapping("/api-role")
    Mono<Void> removeApiRole(@RequestParam Integer roleId,
                             @RequestParam Integer apiId);

    @GetMapping("/role/apis")
    Mono<List<Integer>> getApisFromRole(@RequestParam Integer roleId);

    @GetMapping("/user/roles")
    Mono<List<Integer>> getRolesFromUser(@RequestParam Integer userId);

    @GetMapping("/role/users")
    Mono<List<Integer>> getUsersFromRole(@RequestParam Integer roleId);
}
